home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / PeerAware 1.03 / PeerAware-Setup.exe / Html / browse.js < prev    next >
Text File  |  2008-10-28  |  18KB  |  598 lines

  1. /*
  2. <!-- ***** BEGIN LICENSE BLOCK *****
  3.    - Version: MPL 1.1/LGPL 2.1
  4.    -
  5.    - The contents of this file are subject to the Mozilla Public License Version
  6.    - 1.1 (the "License"); you may not use this file except in compliance with
  7.    - the License. You may obtain a copy of the License at
  8.    - http://www.mozilla.org/MPL/
  9.    -
  10.    - Software distributed under the License is distributed on an "AS IS" basis,
  11.    - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  12.    - for the specific language governing rights and limitations under the
  13.    - License.
  14.    -
  15.    - The Original Code is PeerAware Workspace User Interface.
  16.    -
  17.    - The Initial Developer of the Original Code is
  18.    - Imunin Software Inc.
  19.    - Portions created by the Initial Developer are Copyright (C) 2006-2008
  20.    - the Initial Developer. All Rights Reserved.
  21.    -
  22.    - Contributor(s):
  23.    -
  24.    - Alternatively, the contents of this file may be used under the terms of
  25.    - the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  26.    - in which case the provisions of the LGPL are applicable instead
  27.    - of those above. If you wish to allow use of your version of this file only
  28.    - under the terms of the LGPL, and not to allow others to
  29.    - use your version of this file under the terms of the MPL, indicate your
  30.    - decision by deleting the provisions above and replace them with the notice
  31.    - and other provisions required by the LGPL. If you do not delete
  32.    - the provisions above, a recipient may use your version of this file under
  33.    - the terms of any one of the MPL or the LGPL.
  34.    -
  35.    - ***** END LICENSE BLOCK ***** --> 
  36. */
  37.  
  38. var xmlHttpRequest;
  39. var xslt;
  40. var iPathUp;
  41. var iUser;
  42. var iHub;
  43. var iPath;
  44. var iCheckedFilesCount = 0;
  45. var iCheckedImagesCount = 0;
  46. var qsParm = new Array();
  47. var iDS;
  48. function loadPublicList(){XHR(iDS);}
  49. function SetPublicHublist(aHublist){
  50. iDS = aHublist;
  51. window.setTimeout('loadPublicList()', 10);}
  52.  
  53. function show(object)
  54. {
  55. try
  56. {
  57. document.all[object].style.visibility='visible';document.all[object].style.display='';
  58. }
  59. catch (E)
  60. {
  61. }
  62. }
  63.  
  64. function hide(object)
  65. {
  66. try
  67. {
  68.     document.all[object].style.visibility='hidden';document.all[object].style.display='none';
  69. }
  70. catch (E)
  71. {
  72. }
  73. }
  74.  
  75. function disableMenu(object)
  76. {
  77.     try
  78.     {
  79.         document.all[object].className = "barbutton barbutton_Disabled";
  80.     }
  81.     catch (E)
  82.     {
  83.         alert("c " + object)
  84.     }
  85. }
  86.  
  87. function enableMenu(object)
  88. {
  89.     document.all[object].className = "barbutton";
  90. }
  91.  
  92.  
  93. function XHR(url)
  94. {
  95.     try
  96.     {
  97.         xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
  98.         xmlHttpRequest.open("GET", url, true);
  99.         xmlHttpRequest.onreadystatechange = XHRhandler;
  100.         xmlHttpRequest.send(null);
  101.     }
  102.     catch (E)
  103.     {
  104.         document.all("plist").innerHTML = "Could not load " + url;
  105.     }
  106. }
  107.  
  108. function XHRhandler()
  109. {
  110.     if (xmlHttpRequest.readyState == 4)
  111.     {
  112.         if(xmlHttpRequest.status == 200)
  113.         {
  114.             var xsl =  new ActiveXObject("Microsoft.XMLDOM");
  115.             xsl.async = false;
  116.             xsl.loadXML(xslt);
  117.             document.all("plist").innerHTML = xmlHttpRequest.responseXML.transformNode(xsl);
  118.             $("tname").innerHTML=getTranslation(1);
  119.             $("tsize").innerHTML=getTranslation(43);
  120.             $("tdate").innerHTML=getTranslation(210);
  121.             
  122.             var pathValue = xmlHttpRequest.responseXML.selectSingleNode("//FileListing");
  123.             var path = pathValue.getAttribute("Base");
  124.             var path_array = path.split("/");
  125.             iPathUp="/";
  126.             for (var loop=0; loop < path_array.length-2; loop++)
  127.             {
  128.                 if (path_array[loop].length)
  129.                 {
  130.                     iPathUp = iPathUp + path_array[loop] + "/";
  131.                 }
  132.             }
  133.             //CheckForImages();
  134.             if (path.length<=2)
  135.             {
  136.                 hide('ShowUp');
  137.             }
  138.             else
  139.             {
  140.                 show('ShowUp');
  141.             }
  142.         }
  143.         else
  144.         {
  145.             document.all("plist").innerHTML = "Could not load " + iDS + "<a href='javascript:window.location.reload();'> retry?</a>";
  146.         }
  147.     }
  148. }
  149.  
  150. function decodeutf8(utftext)
  151. {
  152.         var string = "";
  153.         var i = 0;
  154.         var c = c1 = c2 = 0;
  155.  
  156.         while ( i < utftext.length ) {
  157.  
  158.             c = utftext.charCodeAt(i);
  159.  
  160.             if (c < 128) {
  161.                 string += String.fromCharCode(c);
  162.                 i++;
  163.             }
  164.             else if((c > 191) && (c < 224)) {
  165.                 c2 = utftext.charCodeAt(i+1);
  166.                 string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
  167.                 i += 2;
  168.             }
  169.             else {
  170.                 c2 = utftext.charCodeAt(i+1);
  171.                 c3 = utftext.charCodeAt(i+2);
  172.                 string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
  173.                 i += 3;
  174.             }
  175.  
  176.         }
  177.  
  178.         return string;
  179.     }
  180.  
  181.  
  182. function encodeutf8(string)
  183. {
  184.     string = string.replace(/\r\n/g,"\n");
  185.     var utftext = "";
  186.  
  187.     for (var n = 0; n < string.length; n++)
  188.     {
  189.         var c = string.charCodeAt(n);
  190.  
  191.         if (c < 128) {
  192.             utftext += String.fromCharCode(c);
  193.         }
  194.         else if((c > 127) && (c < 2048)) {
  195.             utftext += String.fromCharCode((c >> 6) | 192);
  196.             utftext += String.fromCharCode((c & 63) | 128);
  197.         }
  198.         else {
  199.             utftext += String.fromCharCode((c >> 12) | 224);
  200.             utftext += String.fromCharCode(((c >> 6) & 63) | 128);
  201.             utftext += String.fromCharCode((c & 63) | 128);
  202.         }
  203.     }
  204.     return utftext;
  205. }
  206.  
  207. function OpenFile(aFile, aSize, aHash)
  208. {
  209.     window.open('http://localhost:' + qsParm['port'] + '/remoteShare/' + iHub + '/' + encodeURIComponent(qsParm['user']) + iPath + aFile + '?size=' + aSize + '&hash=TTH/' + aHash, "_self");
  210. }
  211.  
  212. function BrowseFolder(aFolder)
  213. {
  214.     window.open('Browse.html?port=' + qsParm['port'] +  '&path=' + encodeURIComponent(encodeURIComponent(encodeutf8(iPath + aFolder + '/'))) + '&hub=' + encodeURIComponent(encodeURIComponent(encodeutf8(iHub))) + '&user=' + qsParm['user'], "_self", "", false);
  215. }
  216.  
  217. function GoUp()
  218. {
  219.     window.open('Browse.html?port=' + qsParm['port'] +  '&path=' + encodeURIComponent(encodeURIComponent(encodeutf8(iPathUp))) + '&hub=' + encodeURIComponent(encodeURIComponent(encodeutf8(iHub))) + '&user=' + qsParm['user'], "_self");
  220. }
  221.  
  222. function CheckFile(fileControl)
  223. {
  224.     var name = fileControl.name.toLowerCase();
  225.     var found = false;
  226.     if (name.indexOf('.jpg')!=-1 || name.indexOf('.jpeg')!=-1 || name.indexOf('.ico')!=-1 || name.indexOf('.bmp')!=-1 || name.indexOf('.gif')!=-1 || name.indexOf('.png')!=-1 || name.indexOf('.tif')!=-1)
  227.         found=true;
  228.     if (fileControl.checked)
  229.     {
  230.         iCheckedFilesCount++;
  231.         if(iCheckedFilesCount==1)
  232.         {            
  233.             enableMenu("DownloadSelected");
  234.         }
  235.         if (found)
  236.         {
  237.             iCheckedImagesCount++;
  238.             if(iCheckedImagesCount==1)
  239.             {
  240.                 enableMenu("StartSlideShow");
  241.             }
  242.         }
  243.     }
  244.     else
  245.     {
  246.         iCheckedFilesCount--;
  247.         if(iCheckedFilesCount == 0)
  248.         {
  249.             disableMenu("DownloadSelected");
  250.         }
  251.         if (found)
  252.         {
  253.             iCheckedImagesCount--;
  254.             if(iCheckedImagesCount==0)
  255.             {
  256.                 disableMenu("StartSlideShow");
  257.             }
  258.         }
  259.     }
  260. }
  261.  
  262. function checkAll()
  263. {
  264.     var check = false;
  265.     var inputElements = document.all['plist'].getElementsByTagName("input");
  266.     if (inputElements.length)
  267.     {
  268.         if(inputElements[0].checked == true)
  269.             check = true;
  270.     }
  271.     for (i = 1; i < inputElements.length; i++)
  272.     {
  273.         if(inputElements[i].checked != check)
  274.         {
  275.             inputElements[i].checked = check;
  276.             CheckFile(inputElements[i]);
  277.         }
  278.     }
  279. }
  280.  
  281. function downloadSelected()
  282. {
  283.     var check = false;
  284.     var inputElements = document.all['plist'].getElementsByTagName("input");
  285.     for (i = 1; i < inputElements.length; i++)
  286.     {
  287.         if (inputElements[i].controltype == 'file' && (inputElements[i].checked == true || iCheckedFilesCount == 0))
  288.         {
  289.             window.external.DownloadFile(iPath + inputElements[i].name, inputElements[i].fsize, inputElements[i].TTH, iUser, iHub);
  290.         }
  291.         else if (inputElements[i].controltype == 'folder' && (inputElements[i].checked == true || iCheckedFilesCount == 0))
  292.             window.external.DownloadFolder(iPath + inputElements[i].name + "/", iUser, iHub);
  293.     }
  294. }
  295.  
  296. function getTranslation(aID)
  297. {
  298.     if (typeof(window.external)!="undefined" && typeof(window.external.getTranslation)!="undefined")
  299.         return window.external.getTranslation(aID);
  300. }
  301.  
  302. function $(aID)
  303. {
  304.     return document.getElementById(aID)
  305. }
  306.  
  307. function setLanguageStrings()
  308. {
  309.     $("tdownload").innerHTML = getTranslation(93);
  310.     $("tslideshow").innerHTML = getTranslation(201);
  311.     $("StartSlideShow").title=getTranslation(203);
  312.     $("DownloadSelected").title=getTranslation(202);
  313.     $("tprev").title=getTranslation(209);
  314.     $("playbutton").title=getTranslation(205);
  315.     $("tstop").title=getTranslation(207);
  316.     $("pausebutton").title=getTranslation(206);
  317.     $("tnext").title=getTranslation(208);
  318. }
  319.  
  320. function browsePage()
  321. {
  322.     setLanguageStrings();
  323.     hide("slideshow");
  324.     disableMenu("StartSlideShow");
  325.     disableMenu("DownloadSelected");
  326.     var query = decodeURIComponent(window.location.search.substring(1));
  327.     var parms = query.split('&');
  328.     for (var i=0; i<parms.length; i++)
  329.     {
  330.         var pos = parms[i].indexOf('=');
  331.         if (pos > 0)
  332.         {
  333.             var key = parms[i].substring(0,pos);
  334.             var val = parms[i].substring(pos+1);
  335.             qsParm[key] = val;
  336.         }
  337.     }
  338.  
  339.     iHub  = decodeURIComponent(qsParm['hub']);
  340.  
  341.     //user is not always utf-8 encoded:
  342.     try
  343.     {
  344.         iUser = decodeURIComponent(qsParm['user']);
  345.     }
  346.     catch (E)
  347.     {
  348.         iUser = qsParm['user'];
  349.     }
  350.  
  351.     iPath = decodeURIComponent(qsParm['path']);
  352.     
  353.     document.all("path").innerHTML = decodeutf8(iPath);
  354.     document.all("workspace").innerHTML = iHub;
  355.     document.all("username").innerHTML = iUser;
  356.  
  357.     SetPublicHublist('http://localhost:' + qsParm['port'] + '/remoteShare/' + qsParm['hub'] + '/' + qsParm['user'] + iPath);
  358.     
  359.     show('plist');
  360.     xslt = '<?xml version="1.0" encoding="utf-16"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">'
  361.     +'<xsl:template match="/">'
  362.     +'<table class="FileGrid" id="files"><tr class="FileGridHead"><th class="FileGridCellHead" style="width: 25px;" ><input controltype="header" type="checkbox" title="Check all files" onClick="checkAll();"/></th><th class="FileGridHeadCellDef" style="width: 35px;" ><img src="file.gif"/></th><th id="tname" class="FileGridHeadCellDef">Name</th><th class="FileGridHeadCellDef" id="tsize" style="width: 100px;">Size</th><th id="tdate" class="FileGridHeadCellDef" style="width: 180px;">Date Modified</th></tr>'
  363.     +'<tr id="ShowUp"><td/><td class="FileGridCellDefault" align="center"><img src="folder.gif" /></td><td class="FileGridCellDefault" ><a href="javascript:GoUp();" title="Parent Folder">..</a></td></tr>'
  364.     +'<xsl:for-each select="FileListing/Directory"><tr id="folder" class="RowDefault">'
  365.     +'<td align="center"><input type="checkbox" onClick="CheckFile(this);" controltype="folder">'
  366.     +'<xsl:attribute name="name"><xsl:value-of select="@Name" /></xsl:attribute>'
  367.     +' </input></td><td class="FileGridCellDefault" align="center"><img src="folder.gif"/></td><td class="FileGridCellDefault"><a><xsl:attribute name="href">'
  368.     +'javascript:BrowseFolder("<xsl:value-of select="@Name" />");</xsl:attribute><xsl:value-of select="@Name" /></a>'
  369.     +'</td></tr></xsl:for-each>'
  370.     +'<xsl:for-each select="FileListing/File"><tr id="file" class="RowDefault">'
  371.     +'<td align="center"><input type="checkbox" onClick="CheckFile(this);" controltype="file">'
  372.     +'<xsl:attribute name="name"><xsl:value-of select="@Name" /></xsl:attribute><xsl:attribute name="fsize"><xsl:value-of select="@Size" /></xsl:attribute><xsl:attribute name="TTH"><xsl:value-of select="@TTH" /></xsl:attribute>'
  373.     +' </input></td><td class="FileGridCellDefault" align="center"><img src="file.gif"/></td><td class="FileGridCellDefault" ><a><xsl:attribute name="href">javascript:OpenFile("<xsl:value-of select="@Name" />","<xsl:value-of select="@Size" />","<xsl:value-of select="@TTH" />");</xsl:attribute><xsl:value-of select="@Name" /></a></td><td class="FileGridCellDefault" align="right">'
  374.     +'<xsl:choose>'
  375.     +'<xsl:when test="@Size < 1024"><xsl:value-of select="format-number'
  376.     +"(@Size, '#,##0')"
  377.     +'"/> Bytes</xsl:when>'
  378.     +'<xsl:when test="@Size < 1048576"><xsl:value-of select="format-number(@Size div 1024, '
  379.     +"'#,###.##')"
  380.     +'"/> KB</xsl:when>'
  381.     +'<xsl:when test="@Size < 1073741824"><xsl:value-of select="format-number(@Size div 1048576, '
  382.     +"'#,###.##')"
  383.     +'"/> MB</xsl:when>'
  384.     +'<xsl:when test="@Size"><xsl:value-of select="format-number(@Size div 1073741824,'
  385.     +" '#,###.##')"
  386.     +'"/> GB</xsl:when>'
  387.     +'</xsl:choose>'
  388.     +'</td><td class="FileGridCellDefault" align="right"><xsl:value-of select="@Date" /></td></tr></xsl:for-each>'
  389.     +'</table>'
  390.     +'</xsl:template>'
  391.     +'</xsl:stylesheet>';
  392. }
  393.  
  394. var currentImage = 0;
  395. var loadingStarted=false;
  396. var loadingFinished=false;
  397. var slideshowSelected = false;
  398. var prefetchImage;
  399. var timeoutFunction;
  400. var direction = 'f';
  401. var playMode = 'run';
  402. var slideshowsrc;
  403.  
  404. function XHR3handler()
  405. {
  406.     document.images.SlideShow.src = slideshowsrc;
  407.     var maxHeight = document.documentElement.clientHeight - 130;
  408.     var maxWidth = document.documentElement.clientWidth - 20;
  409.     var imgWidth = prefetchImage.width;
  410.     var imgHeight = prefetchImage.height;
  411.  
  412.     if(imgHeight > maxHeight)
  413.     {
  414.         imgWidth=(maxHeight/imgHeight)*imgWidth;
  415.         imgHeight=maxHeight;
  416.     }
  417.     if(imgWidth > maxWidth)
  418.     {
  419.         imgHeight=imgHeight*(maxWidth/imgWidth);
  420.         imgWidth=maxWidth;
  421.     }
  422.     document.images.SlideShow.height=imgHeight;
  423.     document.images.SlideShow.width=imgWidth;
  424.     resize();
  425.     document.images.SlideShow.filters.blendTrans.Play();
  426.     loadingFinished=true;
  427. }
  428.  
  429.  
  430. function resize()
  431. {
  432.     var c = document.getElementById('Control');
  433.     c.style.left = document.documentElement.clientWidth/2 - c.clientWidth/2;
  434.     c.style.position='absolute';
  435.     c.style.bottom = '0px';
  436. }
  437.  
  438. function setImageText(text)
  439. {
  440.     document.all("path").innerHTML = iPath + text;
  441. }
  442.  
  443. function runSlideShow()
  444. {
  445.     if (loadingStarted == true && loadingFinished == false)
  446.     {
  447.         timeoutFunction = setTimeout('runSlideShow()', 5000)
  448.         return;
  449.     }
  450.  
  451.     if (document.all)
  452.     {
  453.         document.images.SlideShow.style.filter="blendTrans(duration=0)";
  454.         document.images.SlideShow.filters.blendTrans.Apply();
  455.     }
  456.  
  457.     var inputElements = document.all['plist'].getElementsByTagName("input");
  458.     var i;
  459.     var src='';
  460.  
  461.     if (direction == 'f')
  462.     {
  463.         currentImage = currentImage + 1;
  464.         for (i = currentImage; i < inputElements.length; i++)
  465.             if (inputElements[i].type == 'checkbox' && inputElements[i].controltype=='file' && (slideshowSelected==false || (slideshowSelected && inputElements[i].checked == true)) && inputElements[i].controltype != 'header')
  466.             {
  467.                 setImageText(inputElements[i].name);
  468.                 src = 'http://localhost:' + qsParm['port'] + '/remoteShare/' + encodeURIComponent(encodeURIComponent(iHub)) + '/' + encodeURIComponent(qsParm['user']) + iPath + inputElements[i].name + '?size=' + inputElements[i].fsize + '&hash=TTH/' + inputElements[i].TTH;
  469.                 currentImage = i;
  470.                 break;
  471.             }
  472.     }
  473.     else
  474.     {
  475.         currentImage = currentImage - 1;
  476.         for (i = currentImage; i >=0; i--)
  477.             if (inputElements[i].type == 'checkbox' && inputElements[i].controltype=='file' && (slideshowSelected==false || (slideshowSelected && inputElements[i].checked == true)) && inputElements[i].controltype != 'header')
  478.             {
  479.                 setImageText(inputElements[i].name);
  480.                 src = 'http://localhost:' + qsParm['port'] + '/remoteShare/' + encodeURIComponent(encodeURIComponent(iHub)) + '/' + encodeURIComponent(qsParm['user']) + iPath + inputElements[i].name + '?size=' + inputElements[i].fsize + '&hash=TTH/' + inputElements[i].TTH;
  481.                 currentImage = i;
  482.                 break;
  483.             }
  484.  
  485.     }
  486.  
  487.     if (currentImage >= inputElements.length && direction == 'f')
  488.     {
  489.         currentImage = 0;
  490.     }
  491.     else if (currentImage == 0 && direction == 'r')
  492.     {
  493.         currentImage = inputElements.length;
  494.     }
  495.  
  496.     if (src!='')
  497.     {
  498.         if (playMode == 'run')
  499.         {
  500.             timeoutFunction = setTimeout('runSlideShow()', 5000)
  501.         }
  502.         loadingStarted = true;
  503.         loadingFinished = false;
  504.         slideshowsrc = src;
  505.         prefetchImage = new Image()
  506.         prefetchImage.onload = XHR3handler;
  507.         //prefetchImage.onabort=XHR3handler;
  508.         //prefetchImage.onerror=XHR3handler;
  509.         prefetchImage.src=src;
  510.     }
  511.     else
  512.     {
  513.         loadingStarted = false;
  514.         loadingFinished = true;
  515.         timeoutFunction = setTimeout('runSlideShow()', 10);
  516.     }
  517. }
  518.  
  519. function CheckForImages()
  520. {
  521. /*
  522.     var inputElements = document.all['plist'].getElementsByTagName("input");
  523.     for (i = 1; i < inputElements.length; i++)
  524.         if (inputElements[i].controltype == 'file' )
  525.         {
  526.             name = inputElements[i].name.toLowerCase();
  527.             if (name.indexOf('.jpg')!=-1 || name.indexOf('.jpeg')!=-1 || name.indexOf('.ico')!=-1 || name.indexOf('.bmp')!=-1 || name.indexOf('.gif')!=-1 || name.indexOf('.png')!=-1 || name.indexOf('.tif')!=-1)
  528.             {
  529.                 //show("StartSlideShowAll");
  530.                 break;
  531.             }
  532.         }
  533. */
  534. }
  535.  
  536. function previous()
  537. {
  538.     direction = 'r';
  539.     clearTimeout(timeoutFunction);
  540.     loadingStarted = false;
  541.     runSlideShow();
  542. }
  543.  
  544. function play()
  545. {
  546.     hide("playbutton");
  547.     show("pausebutton");
  548.     playMode = 'run';
  549.     direction = 'f';
  550.     clearTimeout(timeoutFunction);
  551.     loadingStarted = false;
  552.     runSlideShow();
  553. }
  554.  
  555. function pause()
  556. {
  557.     playMode = 'step';
  558.     clearTimeout(timeoutFunction);
  559.     loadingStarted = false;
  560.     show("playbutton");
  561.     hide("pausebutton");
  562. }
  563.  
  564. function stop()
  565. {
  566.     playMode = 'step';
  567.     clearTimeout(timeoutFunction);
  568.     loadingStarted = false;
  569.     currentImage = 0;
  570.     show('plist');
  571.     show('toolbar');
  572.     hide('slideshow');
  573.     loadingStarted = false;
  574.     slideshowSelected = false;
  575.     document.all("path").innerHTML = iPath;
  576. }
  577.  
  578. function next()
  579. {
  580.     direction = 'f';
  581.     clearTimeout(timeoutFunction);
  582.     loadingStarted = false;
  583.     runSlideShow();
  584. }
  585.  
  586. function StartSlideShow()
  587. {
  588.     if (iCheckedImagesCount)
  589.     {
  590.         slideshowSelected = iCheckedImagesCount>0;
  591.         hide('plist');
  592.         hide('toolbar');
  593.         show('slideshow');
  594.         resize();
  595.         play();
  596.     }
  597. }
  598.